<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div>
    132
  </div>
  <script>
    // const PromiseA = new Promise((resolve, reject) => {
    //   // 异步代码
    //   setTimeout(() => {
    //     // 异步结果返回出去:
    //     // 成功:
    //     resolve('成功') // resove()  => 当前Promise对象的then()里函数体执行
    //     // 失败:
    //     reject(new Error('报错了')) // reject() => 当前Promise对象的catch()里函数体执行
    //   }, 2000)
    // })
    // const PromiseB = PromiseA.then(res => {
    //   return [null, res]
    // }).catch(err => {
    //   return [err, null]
    // })
    // PromiseB.then(resB => {
    //   console.log(resB)
    // })

    // --------------------- ---------------

    var p1 = new Promise(function (resolve, reject) {
      setTimeout(function () {
      // 执行resolve函数后p1的状态 pending->fulfilled
      // 然后执行p1成功时的回调函数 并传递参数
        resolve('resolve 1'); 
        reject('reject 2')
      }, 1000);
    })
    var p2 = p1.then(function (data) { // p1成时的回调函数
      console.log("data", data);
      return data; // 执行return语句后p2的状态pending->fulfilled 同时p2成功的回调函数会被调用
      // return Promise.resolve('1234' + data)
      // return Promise.reject('1234' + data)
      // 当前函数中 return 的结果就可以在后面的 then 中 function 接收到
    }, function (err) { // p1失败时的回调函数
      console.log("err", err);
      // return err;
      return Promise.resolve('1234' + err)
      // return Promise.reject('1234' + err)
    }); // 当前then返回一个新的promise:p2


    var res = p2.then(function (data) {  // p2成功时的回调函数
      console.log("另一个then中的correct分支", data);  // 接收上一个then返回的成功和失败的结果
    }, function (err) { // p2失败时的回调函数
      console.log("另一个then中的err分支", err);
    })

    // var res = p2.then(function (data) {  
    //   console.log("data", data);
    // })
    
  </script>
</body>
</html>